「這次改動我跑過測試了,全部綠燈,應該沒問題。」
這句話聽起來很安心,但如果你維護的是一個需要適配多種執行環境的工具,這句話背後藏著一個沒問出口的問題:「跑過測試」指的是哪一種環境組合?
這個專案(PHPUnit & Pest Test Explorer)支援的執行方式就有好幾種:直接在本機執行、透過 Docker 容器執行、透過 SSH 連到遠端主機執行、透過 Laravel Sail 這種包了一層 Docker Compose 的開發環境執行,還要搭配 ParaTest 平行測試、Xdebug 逐行除錯——光是把這幾個維度隨意組合,可能的執行環境就有十幾二十種。今天要講的是:AI 判斷「這次改動安不安全」時,天然只驗證了它自己方便跑的那一種環境,而不是使用者實際會遇到的那一種。
把這個專案支援的執行方式攤開來看,至少有三個彼此獨立的維度:
這三個維度不是互斥選項,而是可以自由組合的——使用者可能在 Docker 容器裡跑 Pest 搭配 ParaTest,也可能透過 SSH 連到遠端主機跑純 PHPUnit 並掛 Xdebug。光是這三個維度隨意排列組合,可能的執行環境數量就足以讓「我在本機測過了」這句話,實際上只覆蓋了整個矩陣裡極小的一塊。
當 AI 被要求「確認這次改動沒有破壞既有功能」,它預設會選擇成本最低、最方便驗證的路徑——通常就是本機直接執行、不透過任何容器或遠端連線的那一種。這個選擇本身沒有錯,是最快能拿到回饋的方式,但它悄悄縮小了「已驗證」的實際範圍。
用一組對照來看這個落差:
❌ 只驗證預設環境:
「這次改動了路徑解析邏輯,我在本機執行測試,全部綠燈,
這個改動應該是安全的。」
→ 「安全」這個結論的查證範圍只涵蓋本機直接執行這一種環境,
沒有涵蓋 Docker 容器內部路徑(容器內外路徑不一致)、
SSH 遠端主機(本機路徑跟遠端路徑本來就是兩套檔案系統)
這幾種同樣真實存在、且路徑解析邏輯特別容易出問題的組合
✅ 標注驗證範圍,並判斷這次改動碰到了哪個維度:
「這次改動了路徑解析邏輯——這個邏輯在 Docker/SSH 環境下
需要額外的路徑映射處理,屬於高風險維度。
已在本機驗證通過;容器內路徑映射與遠端路徑解析
這兩種環境還沒驗證過,建議至少補一組容器環境的驗證,
因為這次改動的性質剛好落在這兩種環境最容易出錯的地方。」
→ 不是要求每次改動都跑遍所有組合(成本太高),
而是先判斷「這次改動碰到了哪個維度」,
再決定這個維度底下哪些環境組合值得驗證
這正是這個系列反覆出現的模式的另一種樣貌:AI 給出「已驗證沒問題」的結論,查證範圍只涵蓋它實際跑過的那一種環境——如果改動性質剛好落在沒驗證到的維度上,這句「安全」就只是一句沒有依據的自信。
把整個測試矩陣的每一種組合都跑一遍,對日常開發來說成本太高,也不現實。真正可行的做法,是先分辨「這次改動性質上會不會碰到某個維度特有的行為」:
這份「哪一類改動該碰哪一種環境」的對照表,本身就是把「AI 沒辦法窮盡驗證整個矩陣」這件事,收斂成「AI 可以判斷這次改動屬於哪一類、該不該多驗證一種環境」的具體問題。
回想你維護的專案:如果它需要適配多種執行環境(不同作業系統、不同部署方式、不同資料庫),你的測試矩陣設計是「每次都跑一遍所有組合」,還是「本機測過就算過」?如果兩者都不是,你判斷「這次該多測哪個環境」的標準是什麼?
明天用一個具體案例把今天的概念落地:AI 沒考慮到某個平台特有的行為,導致一次看似安全的改動,在特定環境下引入了回歸。